import request from '@/config/axios'

// 订单主表，存储订单的核心信息 VO
export interface OrderVO {
  id: number|null // 自增主键
  customerName: string // 客户信息 (手填的企业客户名称)
  accountManagerName: string // 客户负责人 (手填)
  consigneeName: string // 收货人姓名
  contactPhoneCountryCode: string // 联系号码 - 国家区号
  contactPhoneNumber: string // 联系号码 - 手机号码
  shippingCity: string // 收货地址 - 城市
  shippingState: string // 收货地址 - 州/省
  shippingPostalCode: string // 收货地址 - 邮政编码
  shippingStreetAddress: string // 收货地址 - 详细街道地址
  deliveryDate: Date|null // 交货日期
  deliveryWarningDays: number|null // 交货预警天数
  paymentDueDate: Date|null // 收款日期
  paymentWarningDays: number|null // 收款预警天数
  contractNumber: string // 合同单号 (手填)
  externalOrderNumber: string // 外部单号 (手填)
  discountPercentage: number|null // 优惠比例 (%)
  discountAmount: number|null // 优惠金额
  amountAfterDiscount: number|null // 优惠后金额
  remarks: string // 备注信息
  orderItems: []
  customerCode: String|null,
  accountManagerId: number|null,
  files: []
  saleOrderCode: string|null // 销售订单号
  source: string|null // 单据来源
  orderStatus: string|null // 工单状态
  completeDate: Date|null // 批准日期
  shipmentDate: Date|null // 出货日期
}

export interface ProductOrderVO extends OrderVO {
  productionOrders: []
  productionOrdersLoading: boolean
}

// 定义后端返回的节点状态 (finish, process, wait)
export type TimelineNodeApiStatus = 'finish' | 'process' | 'wait';

// 定义从 API 获取到的单个时间轴节点的类型
export interface OrderTimelineNode {
  key: string;
  title: string;
  status: TimelineNodeApiStatus;
  timestamp: string | null;
}

// 订单主表，存储订单的核心信息 API
export const OrderApi = {
  getOrderCount: async () => {
    return await request.get({ url: `/server/orders/orderCount` })
  },
  // 查询订单主表，存储订单的核心信息分页
  getOrderPage: async (params: any) => {
    return await request.get({ url: `/server/orders/page/customer`, params })
  },
  getOrder: async (id: number) => {
    return await request.get({ url: `/server/orders/get?id=` + id })
  },
  getOrderTimeline: async (id: number) => {
    return await request.get({ url: `/server/orders/${id}/timeline` })
  },
}
